import Scanner from './Scanner';
import nestTokens from "./nestTokens";
/**
 * 将模板字符串变为数组
 * @param {模板字符串} templateStr
 * @returns
 */
export default function parseTemplateToTokens(templateStr) {
  const tokens = [];
  // 创建扫描器，用于扫描模板字符串
  const scanner = new Scanner(templateStr);
  let word;
  while (!scanner.eos()) {
    // 将{{大括号之前的字符串保存在word中
    word = scanner.scanUtil('{{');
    // 如果word不是空字符串
    if (word) {
      // 将保存的字符串收集到tokens中
      tokens.push(['text', word]);
    }
    // 跳过大括号
    scanner.scan('{{');
    // 将}}大括号之前的字符串保存在word中
    word = scanner.scanUtil('}}');
    if (word) {
      // 在判断循环数组时，对#和/分离
      if (word[0] === '#') {
        tokens.push(['#', word.substring(1)]);
      } else if (word[0] === '/') {
        tokens.push(['/', word.substring(1)]);
      } else {
        // 将保存的字符串收集到tokens中
        tokens.push(['name', word]);
      }
    }
    // 跳过大括号
    scanner.scan('}}');
  }
  return nestTokens(tokens);
}
